Crate substrait

source ·
Expand description

Substrait: Cross-Language Serialization for Relational Algebra

§Serialization and deserialization

This crate provides generated types to serialize and deserialize Substrait data.

§Protobuf

Protobuf serialization and deserialization are provided via prost in the proto module.

§Example

§Serialize and deserialize a plan
use prost::Message;
use substrait::proto::Plan;

let plan = Plan::default();

// Serialize the plan
let encoded = plan.encode_to_vec();

// Deserialize the buffer to a Plan
let decoded = Plan::decode(encoded.as_slice())?;

assert_eq!(plan, decoded);

§Serde support

The serde feature generates serde implementations that match the Protobuf JSON Mapping via pbjson.

§Example
§Deserialize a plan version using the serde feature
use substrait::proto::Version;

let version_json = r#"{
  "minorNumber": 21
}"#;

let version = serde_json::from_str::<Version>(version_json)?;
assert_eq!(
  version,
  Version {
    minor_number: 21,
    ..Default::default()
  }
);

§Text

Substrait defines a YAML schema for extensions. Types with serialization and deserialization support for these are provided via typify in the text module.

§Example

§Read a simple extension
use substrait::text::simple_extensions::SimpleExtensions;

let simple_extension_yaml = r#"
%YAML 1.2
---
scalar_functions:
  -
    name: "add"
    description: "Add two values."
    impls:
      - args:
         - name: x
           value: i8
         - name: y
           value: i8
        options:
          overflow:
            values: [ SILENT, SATURATE, ERROR ]
        return: i8
"#;

let simple_extension = serde_yaml::from_str::<SimpleExtensions>(simple_extension_yaml)?;

assert_eq!(simple_extension.scalar_functions.len(), 1);
assert_eq!(simple_extension.scalar_functions[0].name, "add");

Modules§

  • extensionsextensions
    Substrait core extensions
  • parseparse
    Parsing of Substrait data.
  • Generated types for the protobuf substrait package.
  • Generated types for text-based definitions.
  • Substrait version information.